// c++堆内存管理简单示例 new与delete
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;

class A
{
public:
    A(){cout << "我是构造函数" << endl;}
    ~A(){cout << "我是析构函数" << endl;}
};

int main()
{
    // //c语言
    // int *p = (int *)malloc(sizeof(int));
    // *p = 666;
    // free(p);

    // //c++
    // int *p1 = new int;
    // *p1 = 666;
    // delete p1;

    // //分配1000个字节空间存储数据

    // //c语言
    // char *k = (char *)malloc(1000);
    // for(int i = 0; i < 1000; i++)
    //     k[i] = 666;
    // free(k);

    // //c++
    // char *k1 = new char[1000];
    // for(int i = 0; i < 1000; i++)
    //     k[i] = 666;
    // delete []k1;
    
    //A a;    //局部变量，放在栈中

    // A *p = (A *)malloc(sizeof(A));  //在堆中分配内存，但不会调用构造函数
    // free(p);//在堆中释放内存，但不会调用析构函数

    A *p1 = new A;//在堆中分配内存，并且会调用构造函数
    delete(p1);//在堆中释放内存，并且会调用析构函数

    return 0;
}